ES6 部分方法点评

箭头函数(Arrow Functions)

箭头函数时ES6的语法糖之一:

//ES5
var selected = allJobs.filter(function(job){
return job.isSelected();
});

//ES6
var selected = allJobs.filter(job => job.isSelected());

多行方法体的方式:

//ES5
$('#confetti-btn').click(function(event){
playTrumpet();
fireConfettiCannon();
});

//ES6
$("#confetti-btn").click(event => {
playTrumpet();
fireConfettiCannon();
})

语法大体是这样的:

([函数的形参,多个参数则以逗号分隔]) => [函数返回的值/表达式]

此外,还有最重要的一点,箭头函数并没有自己的this值,箭头函数内的this值继承自外围作用域。

{
add: function(piece){},
...
addAll:function addAll(prieces){
var self = this;
_.each(pieces,function(price){
self.add(piece);
});
}

}

//ES6
{
add:function(piece){},
...
addAll:function addAll(pieces){
_.each(pieces,piece => this.add(price));
},
...
}

LET

ES6 let关键字的出现意味着JavaScript迎来了块级作用域({},for,if),可以有效的防止临时变量污染到外层变量:

function f1(){
let n = 5;
if(true){
let n = 10;
}
console.log(n); //5
}

CONST

const用来定义常量,一旦定义了常量就不可修改。

DESTRUCTURING

destructuring 解构,ES6允许按照一定的模式,从数组和对象中提取值。对变量进行赋值,这成为解构(Destructuring):

'use strict';

//对数组的解构赋值
let [foo,[[bar],baz]] = [1,[[2],3]];
console.log(foo); //1
console.log(bar); //2
console.log(baz); //3

//对象的解构赋值
var {foo,bar} = {foo:"aaa",bar:"bbb"};
console.log(foo); //"aaa"
console.log(bar); //"bbb"

//字符串的解构赋值
const [a,b,v,d,e] = "hello";
console.log(a+b+c+d+e); //'hello'

跟箭头函数一样,这也是一个全新的语法糖,它的用处有很对,例如在我们封装参数的时候:

// ES5 二逼青年写法
function study(id, name, sex, grade, nickname, age, address) {
console.log(id);
console.log(name);
console.log(sex);
console.log(grade);
console.log(nickname);
console.log(age);
console.log(address);
}
// ES5 正常青年写法
function study(params) {
console.log(params.id);
console.log(params.name);
console.log(params.sex);
console.log(params.grade);
console.log(params.nickname);
console.log(params.age);
console.log(params.address);
}
//ES6
function study({id, name, sex, grade, nickname, age, address}) {
console.log(id);
console.log(name);
console.log(sex);
console.log(grade);
console.log(nickname);
console.log(age);
console.log(address);
}
study({
id: 1,
name: '林有德',
sex: '男',
grade: '一年级',
nickname: '布莱德',
age: 12,
address: '木马号'
});